#include <stdio.h>
// char* getmery()
// {
//     char p[]="hello world";
//     return p;
// }
// int main()
// {
    
//     char *str=NULL;
//     str=getmery();
//     printf("%s\n",str);
//     return 0;
// }
// double* test(double x)
// {
//     double arr[2]={0};
//     arr[0]=x+273.15;
//     arr[1]=x*18.0+1.00;
//     return arr;
// }
// int main()
// {
//     double x=0.00;
//     double *ret=test(x);
//     printd("%d %d\n",ret[1],ret[2]);
//     return 0;
// }
//动态内存管理函数 所开辟的内存实在栈中
#include <stdlib.h>//malloc realloc calloc free 函数的头文件
#include <errno.h>//errno 指针头文件
#include <string.h>//strerror 函数头文件

// int main()
// {
//     //void* calloc( size_t num, size_t size );
//     int *p=NULL;
//     p=(int*)calloc(4,10);
//     int i=0;
//     if(p!=NULL)
//     {
//         for(i=0;i<10;i++)
//         {
            
//             printf("%d ",*(p+i));
//         }
//     }
//     printf("\n");
//     free(p);
//     p=NULL;
//     return 0;
// }

// int main()
// {
//     //void *malloc(size_t size)
//     int *p=(int*)malloc(40);
//     if(p==NULL)
//     {
//         printf("%s\n",strerror(errno));
//     }
//     else
//     {
//         int i=0;
//         for(i=0;i<10;i++)
//         {
//             // *(p+i)=i;
//             printf("%d ",*(p+i));
//         }
//         printf("\n");

//     }
//     free(p);
//     p=NULL;
//     return 0;
// }
//realloc 函数
// 分配一个大小为 new_size 字节的新内存块，并复制大小等于新旧大小中较小者的内存区域，然后释放旧内存块。
//若无足够内存，则不释放旧内存块，并返回空指针。
// int main()
// {
//     //开辟
//     int *p=NULL;
//     p=(int*)calloc(10,4);
//     int i=0;
//     int *pp=(int*)realloc(p,80);
//     if(pp==NULL)
//     {
//             printf("%s\n",strerror(errno));
//     }
//     else
//     pp=p;
//     //释放
//     free(pp);
//     pp=NULL;
//     return  0;
// }
//柔性数组


struct Peo
{
    int a;
    int arr[];//柔性数组成员
};
int main()
{
    struct Peo * p=(struct Peo *)malloc(sizeof(struct Peo)+40);
    //包含柔性数组的结构体，在用sizeof 计算大小时不会算柔性数组大小
    //创建结构体变量时，结构体内有柔性数组成员 要用malloc函数 创建动态空间
    if(p==NULL)
    {
        return 1;
    }
    int i=0;
    p->a=2;
    for(i=0;i<10;i++)
    {
        p->arr[i]=i;
    }
    for(i=0;i<10;i++)
    {
        printf("%d ",p->arr[i]);
    }
    printf("\n");
    printf("%d\n",p->a);
    free(p);
    p=NULL;
    return 0;
}